/**
 * Copyright (C) 2017 - 2020 https://github.com/joewee
 * <p>
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 * <p>
 * http://www.apache.org/licenses/LICENSE-2.0
 * <p>
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.bifrost.repository;

import com.bifrost.entity.CustomerCardHistory;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.transaction.annotation.Transactional;

import javax.annotation.Nonnull;
import java.math.BigInteger;

/**
 *
 *
 *@author joewee
 *@version 1.0.0
 *@Date 2018/4/14 21:15
 */
public interface CustomerCardHistoryRepository extends JpaRepository<CustomerCardHistory,Long>{

    /**
     * 根据openid和会员卡号查询记录
     * @param openid
     * @param cardNum
     * @return
     */
    CustomerCardHistory findFirstByOpenidAndCardNumber(String openid,String cardNum);

    /**
     * 根据门店和会员卡号查询记录
     * @param storeId
     * @param cardNum
     * @return
     */
    CustomerCardHistory findFirstByMerchantIdAndCardNumber(@Nonnull Long storeId, @Nonnull String cardNum);

    /**
     * 根据门店和会员电话查询记录
     * @param storeId
     * @param phone
     * @return
     */
    CustomerCardHistory findFirstByMerchantIdAndTelephone(Long storeId,String phone);

    /**
     * 在历史记录中增加积分
     * @param historyId
     * @param points
     * @return
     */
    @Modifying
    @Transactional
    @Query(value = "UPDATE CUSTOMER_CARD_HISTORY SET BONUS_PONITS = BONUS_PONITS+ ?2 WHERE ID = ?1",nativeQuery = true)
    int incrementHistoryBonusPoints(Long historyId,BigInteger points);
    /**
     * 在历史记录中扣减积分
     * @param historyId
     * @param points
     * @return
     */
    @Modifying
    @Transactional
    @Query(value = "UPDATE CUSTOMER_CARD_HISTORY SET BONUS_PONITS = BONUS_PONITS -?2 WHERE ID = ?1 AND BONUS_PONITS>=?2",nativeQuery = true)
    int decrementHistoryBonusPoints(Long historyId,BigInteger points);
}
